package top.dotgo.kit;

import lombok.AllArgsConstructor;

/**
 * @author jornl
 * @date 2020/2/24 14:52 星期一
 */
public class Const {

    /**
     * 请求来源
     */
    public enum from implements BaseEnum {
        /**
         * 平台系统
         */
        SYS("平台系统", 0),
        /**
         * 业务系统
         */
        BIZ("业务系统", 1),
//        SHOP("业务系统", 1),
        /**
         * 客户端小程序
         */
        CM("客户端小程序", 2);

        public final String title;
        public final int v;

        from(String title, int v) {
            this.title = title;
            this.v = v;
        }

        @Override
        public final int v() {
            return v;
        }
    }

    /**
     * 类型  枚举集合
     */
    public interface Type extends BaseEnum {
        /**
         * 组织机构类型
         */
        enum org implements Type {

            /**
             * 总公司
             */
            TOP("总公司", 0),
            /**
             * 分子公司
             */
            COMPANY("分子公司", 1),
            /**
             * 部门
             */
            DEP("部门", 2);

            public final String title;
            public final int v;


            org(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

        /**
         * 账号类型
         */
        enum acc implements Type {
            /**
             * 平台 超管
             */
            PT_ADMIN("平台管理员", 0),
            /**
             * 平台员工
             */
            PT_STAFF("平台员工", 1),
            /**
             * 供应商 超管
             */
            SHOP_ADMIN("商家管理员", 2),
            /**
             * 客户 员工
             */
            SHOP_STAFF("商家员工", 3),
            /**
             * 普通用户
             */
            BIZ_USER("普通用户", 4);

            public final String title;
            public final int v;


            acc(String title, int v) {
                this.title = title;
                this.v = v;
            }

            public static acc load(int v) {
                for (acc value : acc.values()) {
                    if (v == value.v) {
                        return value;
                    }
                }
                return null;
            }

            @Override
            public final int v() {
                return v;
            }
        }


        /**
         * 提现类型
         */
        enum cash implements Type {
            /**
             * 微信
             */
            Wx_PAY("微信", 0),
            /**
             * 支付宝
             */
            ALI_PAY("支付宝", 1),
            /**
             * 银行卡
             */
            BANK("银行卡", 2);

            public final String title;
            public final int v;

            cash(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

    }

    /**
     * 状态 枚举集合
     */
    public interface Status extends BaseEnum {
        Enum DISABLE = new Enum("禁用", 0);
        Enum ENABLE = new Enum("正常", 1);

        /**
         * 账号状态
         */
        enum acc implements Status {
            ;
            public final String title;
            public final int v;

            acc(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

        /**
         * 员工的状态
         */
        enum staff implements Status {
            ;

            public final String title;
            public final int v;

            staff(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

        /**
         * 用户状态
         */
        enum user implements Status {
            ;

            public final String title;
            public final int v;

            user(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

        /**
         * 组织状态
         */
        enum org implements Status {
            ;

            public final String title;
            public final int v;

            org(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

        /**
         * 菜单权限状态
         */
        enum menu implements Status {
            ;

            public final String title;
            public final int v;

            menu(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

        /**
         * 数据字典状态
         */
        enum dict implements Status {
            ;

            public final String title;
            public final int v;

            dict(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public final int v() {
                return v;
            }
        }

        /**
         * 商品 状态
         */
        enum goods implements BaseEnum {
            /**
             * 未审核
             */
            CREATED("未审核", 0),
            /**
             * 审核中
             */
            VRIFYING("审核中", 1),
            /**
             * 未上架
             */
            VERIFIED("未上架", 2),
            /**
             * 销售中
             */
            SALE("销售中", 3),
            /**
             * 下架
             */
            OUT("下架", 4);
            public final String title;
            public final int v;

            goods(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public int v() {
                return 0;
            }
        }

        /**
         * 提现状态
         */
        enum cash implements BaseEnum {
            /**
             * 审核中
             */
            VERIFYING("审核中", 0),
            /**
             * 审核通过
             */
            VERIFIED("审核通过", 1),

            /**
             * 审核拒绝
             */
            OUT("审核拒绝", 2);
            public final String title;
            public final int v;

            cash(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public int v() {
                return 0;
            }
        }

        /**
         * 订单状态
         */
        enum order implements BaseEnum {
            /**
             * 待支付
             */
            CREATED("待支付", 0),
            /**
             * 待使用
             */
            PAID("待使用", 1),
            /**
             * 已使用
             */
            USED("已使用", 2),
            /**
             * 失效
             */
            LOSE("失效", 3),
            /**
             * 支付失败
             */
            FAILED("支付失败", 4),
            /**
             * 支付超时
             */
            TIMEOUT("支付超时", 4);


            public final String title;
            public final int v;
            order(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public int v() {
                return 0;
            }
        }

        /**
         * 支付状态
         */
        enum pay implements BaseEnum {
            /**
             * 待支付
             */
            CREATED("待支付", 0),
            /**
             * 待使用
             */
            PAID("支付成功", 1),
            /**
             * 支付取消
             */
            CANCEL("取消支付", 2),
            /**
             * 支付超时
             */
            TIMEOUT("支付超时", 3),
            /**
             * 支付失败
             */
            FAIL("支付失败", 4);

            public final String title;
            public final int v;
            pay(String title, int v) {
                this.title = title;
                this.v = v;
            }

            @Override
            public int v() {
                return 0;
            }
        }

    }

    /**
     * BaseEnum
     */
    public interface BaseEnum {
        /**
         * 获取常量值
         *
         * @return v
         */
        int v();
    }

    /**
     * 自定义枚举
     */
    @AllArgsConstructor
    public static class Enum implements BaseEnum {

        public final String title;
        public final int v;

        @Override
        public final int v() {
            return v;
        }
    }

}
